home *** CD-ROM | disk | FTP | other *** search
- ;------------------------------------------------------------
- ; This procedure file defines the procedure obj_vol, which
- ; is used as an example in Chapter 12 of _Objects and Object
- ; Graphics_. Note that the routine breaks several times and
- ; asks for user input before proceeding.
- ;-------------------------------------------------------------
-
- PRO obj_vol
-
- ; Create volume data descriptions.
- data = BYTARR(64, 64, 64)
- FOR i=0, 63 do data[*, i, 0:i] = i*2
- data[5:15, 5:15, 45:55] = 128
- data[45:55, 45:55, 5:15] = 255
-
- ; Create a volume object.
- myvolume = OBJ_NEW('IDlgrVolume', data)
-
- ; Scale volume object into normalized coordinates.
- cc = [-0.5, 1.0/64.0]
- myvolume -> SetProperty, XCOORD_CONV=cc, YCOORD_CONV=cc, ZCOORD_CONV=cc
-
- ; Set volume object properties.
- myvolume -> SetProperty, ZERO_OPACITY_SKIP=1
- myvolume -> SetProperty, ZBUFFER=1
-
- ; Create object hierarchy.
- mywindow = OBJ_NEW('IDLgrWindow', DIMENSIONS=[200, 200])
- myview = OBJ_NEW('IDLgrView', VIEWPLANE_RECT=[-1, -1, 2, 2], $
- ZCLIP=[2.0, -2.0], COLOR=[200,200,0])
- mymodel = OBJ_NEW('IDLgrModel')
-
- myview -> Add, mymodel
- mymodel -> Add, myvolume
- mymodel -> Rotate, [1, 1, 1], 45
-
- ; Draw the volume object.
- mywindow -> Draw, myview
-
- ; Prompt for user input before proceeding.
- var=''
- READ, var, PROMPT='Press Return to set opacities'
-
- ; Set opacities of the volumes and redraw.
- opac = bytarr(256)
- opac[0:127] = bindgen(128)/8
- opac[255] = 255
- opac[128] = 255
- myvolume -> SetProperty, OPACITY_TABLE0=opac
- mywindow -> Draw, myview
-
- ; Prompt for user input before proceeding.
- READ, var, PROMPT='Press Return to set colors'
-
- ; Set colors of the volumes and redraw.
- rgb = bytarr(256, 3)
- rgb[0:127, 0] = bindgen(128)
- rgb[0:127, 1] = bindgen(128)
- rgb[0:127, 2] = bindgen(128)
- rgb[128, *] = [255, 0, 0]
- rgb[255, *] = [0, 0, 255]
- myvolume -> SetProperty, RGB_TABLE0=rgb
- mywindow -> Draw, myview
-
- ; Prompt for user input before proceeding.
- READ, var, PROMPT='Press Return to add lighting'
-
- ; Create a light object and redraw.
- myvolume -> SetProperty, AMBIENT=[100, 100, 100], LIGHTING_MODEL=1, TWO_SIDED=1
- lmodel = OBJ_NEW('IDLgrModel')
- myview -> add, lmodel
- light = OBJ_NEW('IDLgrLight', TYPE=2, LOCATION=[0, 0, 1], COLOR=[255, 255, 255])
- lmodel -> Add, light
- mywindow -> Draw, myview
-
- ; Prompt for user input before proceeding.
- READ, var, PROMPT='Press Return to use MIP compositing'
-
- ; Change compositing function and redraw.
- myvolume -> SetProperty, COMPOSITE_FUNCTION=1, LIGHTING_MODEL=0
- mywindow -> Draw, myview
-
- ; Prompt for user input before proceeding.
- READ, var, PROMPT='Press Return to destroy objects'
-
- ; Destroy the objects.
- OBJ_DESTROY, myview
- OBJ_DESTROY, mywindow
-
- END
-